<!DOCTYPE html>
<html lang="ch-CN">
<head>
    <meta charset="UTF-8">
    <title>arguments</title>
</head>
<style>
    body {
        width: 100%;
        height: 100vh;
        background-color: wheat;
        font-size: 30px;
        text-decoration: none;
        font-family: "华文楷体";
    }
</style>
<script>
    /*  在调用函数时，浏览器每次都会传递进两个隐含参数：
             * 1：函数的上下文对象----this
             * 2：封装实参的对象----arguments
                  - arguments是一个类数组对象，可以通过索引来操作数据，也可以获取长度
                  - 在函数调用时，我们所传递的实参都会在arguments中保存
                  - arguments.length可以来获取实参的长度
                  - 不定义形参，也可以通过arguments来获取实参
                    · arguments[index]的办法来获取实参
    */

    /*
      * this指的是一个对象
      * 调用方式不同，this指向的对象也不同
      *   1：以函数的形式调用时，this指向的永远是window
      *   2：以方法的形式调用时，this就是调用方法的那个对象
      *   3：以构造函数形式调用时,this就是新创建的这个对象
      *   4：使用call(obj)和apply(obj)方法调用时，this就是方法中’obj‘指定的对象
    */

    //构造函数
    function Fun() {
        this.name = arguments[0]
        this.gender = arguments[1]
        this.age = arguments[2]
        //获取实参的长度
        console.log(arguments.length)
    }

    //向构造函数原型中添加方法
    Fun.prototype.ff = function () {
        return "我是" + this.name +"性别"+this.gender+ "今年" + this.age + "岁"
    }
    //对象实例化
    let fun = new Fun("张三", "男", 20)
    // 调用方法
    document.write(fun.ff())
</script>
<body>
</body>
</html>